package anli;

import java.util.Random;
import java.util.Scanner;

public class anli5 {
    public static void main(String[] args) {
        System.out.println(ticket(1000, "头等舱", 5));
        System.out.println(code(6));
        System.out.println("当前选手的评分是" + score(6));
    }

    //用户购买机票时，机票原价会按照淡季、旺季，头等舱还是经济舱的情况进行相应的优惠，
    // 优惠方案如下:5-10月为旺季，头等舱9折，经济舱8.5折;11月到来年4月为淡季，头等舱7折，
    // 经济舱6.5折请开发程序计算出用户当前机票的优惠价。
    public static double ticket(double price, String type, int month) {
        if (month < 1 || month > 12) {
            throw new IllegalArgumentException("抛出异常");
        }
        if (month >= 5 && month <= 10) {
            switch (type) {
                case "头等舱":
                    price *= 0.9;
                    break;
                case "经济舱":
                    price *= 0.85;
                    break;
            }
        } else {
            switch (type) {
                case "头等舱":
                    price *= 0.7;
                    break;
                case "经济舱":
                    price *= 0.65;
                    break;
            }
        }
        return price;
    }


    //开发一个程序，可以生成指定位数的验证码，每位可以是数字、大小写字母
    //① 方法是否需要接收数据? 需要接收一个整数,控制生成验证码的位数。
    //② 方法是否需要返回数据?需要返回生成的验证码，
    //③ 方法内部的业务:使用for循环依次生成每位随机字符，并使用一个
    //String类的变量把每个字符连接起来，最后返回该变量即可
    public static String code(int num) {
        Random random = new Random();
        String code = "";
        for (int i = 0; i <= num; i++) {
            int nextInt = random.nextInt(3);
            switch (nextInt) {
                case 0:
                    code += random.nextInt(10);
                    break;
                case 1:
                    char c1 = (char) (random.nextInt(24) + 56);
                    code += c1;
                    break;
                case 2:
                    char c2 = (char) (random.nextInt(25) + 97);
                    code += c2;
                    break;
            }

        }
        return code;
    }

    //案例
    //评委打分案例
    //需求
    //在唱歌比赛中，可能有多名评委要给选手打分，分数是[0-100]之间的整数。选手最后得分为:去掉最高分、最低分后剩余分数的平均分，
    // 请编写程序能够录入多名评委的分数，并算出选手的最终得分
    //分析:
    //需要接收评委的人数。1.方法是否需要接收数据进行处理?
    //2.方法是否需要返回数据? 需要返回计算出的选手最终得分
    //3.方法内部的业务:定义数组，录入评委的分数存入到数组中去，接着，我们就需要遍历数组中的分数计算出总分，
    // 并找出最高分，最低分、最后按照这些数据算出选手最终得分并返回即可。
    public static double score(int number) {
        /**创建一个数组number是随机定义的变量**/
        int[] scores = new int[number];
        Scanner scanner = new Scanner(System.in);
        /**循环选手**/
        for (int i = 0; i < scores.length; i++) {
            //请录入第几个选手 (i+1)下标为0，+1证明从第一个开始算
            System.out.println("请录入" + (i + 1) + "个选手");
            //用scanner方法 输入控制台第几个选手的成绩
            int nextInt = scanner.nextInt();
            //通过第几个选手成绩 赋值给对应的下标位置上
            scores[i] = nextInt;
        }

        int num = 0;
        int max = scores[0];
        int min = scores[0];

        for (int i = 0; i < scores.length; i++) {
            int score = scores[i];
            num += score;
            if (score > max) {
                max = score;

            }
            if (score < min) {
                min = score;
            }


        }
        /**1.0(为了转换小数类型)*(选手成绩总和-最小选手成绩-最大选手成绩）/(选手数量-2 2代表最大成绩和最小成绩)*/
        return 1.0 * (num - min - max) / (number - 2);
    }

}
